FILE: DDP_INTER:TOS HEWLETT-PACKARD: DDP_INTERFACE (c) Coleco 1983 Confidential Mon, 21 May 1984, 16:35 Page 1
1 ;^Z80^
3 ;NAME ^Rev 01 - DTT^
4
5 De_DDP_INTERFACE MACRO ;Header Rev. 5
6 .GOTO Ede_DDP_INTERFACE
7
8 Project: TAPE, C101
9
10 ******************************
11 * *
12 * DDP_INTERFACE DTT *
13 * *
14 ******************************
15
16 Rev History
17 Rev. Date Name Change
18 1 9/13/83 DTT CHANGED TO ALLOW ERROR RETIRES
19 0 7/5/83 DTT Initial Pseudo Code
20
21 Function:
22 REQUEST READS AND WRITES AS DEFINED IN OCB.
23 REQUESTS ABORT_TAPE.
24 TEST STATUS OF TAPE REQUEST.
25
26
27 Ede_DDP_INTERFACE MEND
28 Pseudo_code_DDP_INTERFACE MACRO ;Pseudocode macro area
29 BEGIN:
30 STORE D_OVERLAY_NUMBER
31 HL := POINTER TO OCB := D_OVERLAY_NUMBER*5 + OVERLAY_TABLE_POINTER
32 MOVE OCB TO D_CSA
33 IF WRITE THEN
34 SEND WRITE_COMMAND
35 ELSE
36 SEND READ_COMMAND
37 ENDIF
38 END
39 .GOTO Ep_DDP_INTERFACE
40
41
42
43 Ep_DDP_INTERFACE MEND
44
45 ;Subroutines called
46 ; EXT
47
48 ;Subroutines defined
49 GLOBAL TEST_TAPE
50 GLOBAL ABORT_TAPE
51 GLOBAL LOAD_OVERLAY
52 GLOBAL WRITE_OVERLAY
53 GLOBAL CALC_OCB_ADDR
FILE: DDP_INTER:TOS HEWLETT-PACKARD: DDP_INTERFACE (c) Coleco 1983 Confidential Mon, 21 May 1984, 16:35 Page 2
54 GLOBAL WRITE_BLOCKS
55 GLOBAL LOAD_BLOCKS
56 GLOBAL BLOCK_IO
57 ; GLOBAL
58
59 ;Operating system calls
60 ; EXT
61
62 ;Inputs/Outputs passed in registers
63 ; A = OVERLAY NUMBER 1 thru N
64 ; A <> 0 = ERROR
65
66 ;External data areas used
67 EXT OCB_PTR ;POINTER TO OVERLAY CONTROL TABLE
68
69 ;Global data areas defined
70 GLOBAL D_OVERLAY_NUMBER
71 GLOBAL D_TAPE_STATE
72 GLOBAL D_CSA
73 ; GLOBAL
74
75 ;Local equates
76 ; EQU
77
78 ;Global equates
79 GLOBAL READ_TAPE
80 GLOBAL WRITE_TAPE
81 GLOBAL KILL_TAPE
82 0081 READ_TAPE EQU 81H
83 0082 WRITE_TAPE EQU 82H
84 0087 KILL_TAPE EQU 87H
85 ; INCLUDE File_name:userid
86
87
88 PROG
89
90 ; TEST FOR COMPLETION OF IO REQUEST
91 0000' TEST_TAPE:
92 0000' 3A 0000 LD A,(D_CSA)
93 0003' B7 OR A
94 0004' C3 3D00' JP EXIT_TAPE
95 ;*
96 ;*
97 ;*
98 0007' ABORT_TAPE:
99 0007' 3E 87 LD A,KILL_TAPE
100 0009' 32 0000 LD (D_CSA),A
101 000C' C3 3D00' JP EXIT_TAPE
102 ;*
103 ;*
104
105 000F' CALC_OCB_ADDR:
106 000F' 3D DEC A ;ADDR = OCB_TABLE(OV_NUM-1*5)
107 0010' 4F LD C,A ;GET THE OVERLAY NUMBER IN C
108 0011' 06 00 LD B,0
109 0013' 2A 0000# LD HL,(OCB_PTR) ;POINTER TO THE OCB TABLE
110 0016' 09 ADD HL,BC ;OCB_ADDR = OVERLAY_NUM*5 + START_OF_TABLE
FILE: DDP_INTER:TOS HEWLETT-PACKARD: DDP_INTERFACE (c) Coleco 1983 Confidential Mon, 21 May 1984, 16:35 Page 3
111 0017' 09 ADD HL,BC
112 0018' 09 ADD HL,BC
113 0019' 09 ADD HL,BC
114 001A' 09 ADD HL,BC
115 001B' C9 RET
116 ;*
117 001C' WRITE_OVERLAY:
118 001C' 37 SCF ;SET CARRY FLAG IF WRITE INSTRUCTION!
119 001D' 18 01 JR LD_1
120 ;*
121 ;*
122 001F' LOAD_OVERLAY:
123 001F' B7 OR A ;RESET CARRY FLAG IF READ
124 ;*
125 ;*
126 0020' LD_1:
127 ; BEGIN (Ordinarily registers are restored; retain only the pushes and pops you need.)
128 ;*
129 ;*
130 ;*
131 0020' 32 0000 LD (D_OVERLAY_NUMBER),A ;FOR DEBUGGING PURPOSES
132 ;*
133 ;*
134 0023' F5 PUSH AF ;++++++++++++++++++++;
135 0024' CD 0F00' CALL CALC_OCB_ADDR ;
136 0027' F1 POP AF ;--------------------; ;SAVE THE CARRY FLAG IF SET
137 ;*
138 0028' 30 04 JR NC,LOAD_BLOCKS
139
140 002A' WRITE_BLOCKS:
141 002A' 3E 82 LD A,WRITE_TAPE ;WRITE INSTRUCTIONS GO HERE
142 002C' 18 02 JR BLOCK_IO
143 002E' LOAD_BLOCKS:
144 002E' 3E 81 LD A,READ_TAPE ;READ INSTRUCTIONS GO HERE
145 0030' BLOCK_IO:
146 0030' 11 0100 LD DE,D_CSA+1 ; ;POINT TO THE COMMAND STATUS AREA
147 0033' 01 0500 LD BC,5 ; ;NUMBER OF BYTES TO MOVE
148 0036' ED B0 LDIR
149 0038' 11 0000 LD DE,D_CSA
150 003B' 12 LD (DE),A ;SET THE COMMAND IN THE D_CSA BUFFER
151 003C' AF XOR A
152 GLOBAL EXIT_TAPE
153 003D' EXIT_TAPE:
154 003D' C9 RET
0 Error(s) Detected. 62 Program Bytes.
17 Symbols Detected.
FILE: DDP_INTER:TOS HEWLETT-PACKARD: DDP_INTERFACE (c) Coleco 1983 Confidential Mon, 21 May 1984, 16:35 Page 4
Value Symbol Defined Referenced:
0007' ABORT_TAPE 98 50
0030' BLOCK_IO 145 56 142
000F' CALC_OCB_ADDR 105 53 135
0000 D_CSA 72 92 100 146 149
0000 D_OVERLAY_NUMBER 70 131
0000 D_TAPE_STATE 71
003D' EXIT_TAPE 153 94 101 152
0087 KILL_TAPE 84 81 99
0020' LD_1 126 119
002E' LOAD_BLOCKS 143 55 138
001F' LOAD_OVERLAY 122 51
0000# OCB_PTR 67 109
0081 READ_TAPE 82 79 144
0000' TEST_TAPE 91 49
002A' WRITE_BLOCKS 140 54
001C' WRITE_OVERLAY 117 52
0082 WRITE_TAPE 83 80 141